import sys
from socket import *
import cv2
import os

def handle_client(s):
    while True:
        # 接收图片名
        filename = s.recv(1024).decode()
        # 接收图片大小
        size = int(s.recv(1024).decode())
        # 初始化大小
        cs = 0
        # 写入文件
        with open(f'file/c-{filename}', 'wb') as file:
            # 循环
            while cs < size:
                # 接收图片
                data = s.recv(1024)
                file.write(data)
                # 累计
                cs += len(data)
                print(f'已接收：{cs / size * 100:.2f}%')
        print('接收完毕')
        s.send('接收完毕'.encode('utf-8'))
        cd(s)

def cd(s):
    # 菜单
    print('1.关机\n2.重启\n3.发送文件\n4.截图\n5.查看文件')
    # 输入
    choise = input('请输入指令：')
    # 发送过去
    s.send(choise.encode())
    # 关机 or或 重启
    if choise == '1' or choise == '2':
        s.recv(1024)
        sys.exit(0)
    # 监视
    elif choise == '3':
        handle_client(s)
    elif choise == '4':
        sp(s)
    elif choise == '5':
        dir = s.recv(51111).decode('utf-8')
        print(dir)
        cd(s)





def main():
    if not os.path.exists('file'):
        os.mkdir('file')
    # 准备一个
    S = socket()
    # IP地址
    # IP = ''
    IP = gethostname()
    # 端口
    port = 8888
    # 绑定
    S.bind((IP, port))
    # 监听
    S.listen()
    # 接收
    s, addr = S.accept()
    print(addr)
    # 发送字符串
    s.send('你好'.encode())
    cd(s)





def sp(s):
    c = 1
    for i in range(5):
        # 接收图片大小
        size = int(s.recv(1024).decode())
        # 发送收到了图片大小
        s.send('ok'.encode())
        # 初始化大小
        cs = 0
        # 写入文件
        with open(f'file/{c}.jpg', 'wb') as file:
            # 循环
            while cs < size:
                # 接收图片
                data = s.recv(2048)
                file.write(data)
                # 累计
                cs += len(data)
                print(f'第{c}张图片，已接收：{cs / size * 100:.2f}%')
        c += 1

        # 创建显示图片窗口
        # cv2.namedWindow('51')
        cv2.namedWindow("51", cv2.WINDOW_NORMAL)  # 关键：允许手动调整窗口尺寸
        # cv2.resizeWindow("窗口名称", 宽度, 高度)  # 例如 (800, 600)
        cv2.resizeWindow("51", 800, 600)  # 例如 (800, 600)
        # 读取图片
        img_i = cv2.imread('11.jpg')
        # 显示图片
        cv2.imshow('51', img_i)
        cv2.waitKey(20)
        # 发送收到了图片
        s.send('ok'.encode())
        # 关闭窗口
        cv2.destroyAllWindows()
    cd(s)




def dir(s):
    while True:
        di = s.recv(1024).decode('utf-8')
        if di == '1':
            cd(s)






main()



# 发送数字
# s.send(str(11).encode())

# 用循环
# while True:
#     s, addr = S.accept()
#     print(addr)
#     s.send('你好'.encode())



    #






























